package com.ihrm.company.controller;


import com.ihrm.common.entity.Result;
import com.ihrm.company.service.CompanyService;
import com.ihrm.domain.company.Company;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

/**
 * @必看知识点 3
 * // @RequestBody 的作用
 * 解析请求体：@RequestBody 注解会告诉 Spring 框架，将 HTTP 请求的请求体内容解析为一个 Java 对象。
 * 自动反序列化：Spring 会使用配置的 HttpMessageConverter（如 Jackson 或 Gson）将请求体中的 JSON
 * 或 XML 数据反序列化为 Java 对象。
 * 简化开发：开发者无需手动解析请求体，可以直接在方法参数中接收一个完整的 Java 对象
 * <p>
 * // @PathVariable 的作用
 * 提取路径变量：@PathVariable 用于从请求的 URL 中提取动态部分，并将其值传递给控制器方法的参数。
 *
 * @CrossOrigin 是 Spring 框架中用于简化跨域资源共享（CORS）配置的注解。它允许开发者在控制器类或方法上添加注解
 * ，从而指定哪些来源可以访问该资源，解决了浏览器因同源策略限制而导致的跨域问题
 *
 */

@CrossOrigin  // 解决跨域问题
@RestController
@RequestMapping("/company")
public class CompanyController {

    @Autowired
    private CompanyService companyService;


    //  保存企业
    @RequestMapping("/save")
    // 这里的@RequestBody注解告诉Spring框架，将HTTP请求的请求体内容解析为一个Java对象。
    // 可以省略因为@RestController已经包含
    public @ResponseBody Result saveCompany(@RequestBody Company company) {
        Result result = new Result();
        companyService.saveCompany(company);
        return result.SUCCESS();
    }

    // 更新企业
    @PutMapping("/update/{id}")
    public Result updateCompany(@PathVariable(value = "id") String id, @RequestBody Company company) {
        Result result = new Result();
        company.setId(id);
        try {
            companyService.updateCompany(company);
            return result.SUCCESS();
//            result.setSuccess(true);
//            result.setMessage("Company updated successfully.");
        } catch (IllegalArgumentException e) {
            return result.ERROR();
//            result.setSuccess(false);
//            result.setMessage(e.getMessage());
        }
    }
    // 删除企业
    @DeleteMapping("/delete/{id}")
    public Result deleteCompany(@PathVariable(value = "id") String id) {
        try {
            companyService.deleteCompany(id);
            return Result.SUCCESS();
        } catch (IllegalArgumentException e) {
            return Result.ERROR();
        }
    }
    // 根据id查询企业
    @GetMapping("/find/{id}")
    public Result findCompanyById(@PathVariable(value = "id") String id) {
        try {
            return new Result().SUCCESS(companyService.findCompanyById(id));
        } catch (IllegalArgumentException e) {
            return Result.ERROR();
        }
    }
    // 查询所有企业
    @GetMapping("/findAll")
    public Result findAll() {
        try {
            return new Result().SUCCESS(companyService.findAll());
        } catch (IllegalArgumentException e) {
            return Result.ERROR();
        }
    }

}
